package com.bnz.canal.listener;

import com.alibaba.fastjson.JSON;

import com.bnz.canal.entity.BrandEntity;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.List;
//安装canal
//@CanalEventListene
public class CanalEventDataListener {
	@Autowired
	private StringRedisTemplate redisTemplate;
	/**

	 //插入监控
	 */
	// @InsertListenPoint
	// public void onEventInsert(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
	//     System.out.println("onEventInsert");
	//     System.out.println("------------------------------------------------------------------------------------");
	//     rowData.getAfterColumnsList().stream().forEach(c-> System.out.println(c.getName() + "->" + c.getValue()));
	// }
	//修改监控
	// @UpdateListenPoint
	// public void onEventUpdate(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
	//     System.out.println("onEventUpdate");
	//     System.out.println("------------------------------------------------------------------------------------");
	//     rowData.getAfterColumnsList().stream().forEach(c-> System.out.println(c.getName() + "->" + c.getValue()));
	//
	// }
	//删除监控
	// @DeleteListenPoint
	// public void onEventDelete(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
	//     System.out.println("onEventDelete");
	//     System.out.println("------------------------------------------------------------------------------------");
	//     rowData.getBeforeColumnsList().stream().forEach(c-> System.out.println( c.getName() + "->" + c.getValue()));
	// }


//	canal
	/**
	 *  自定义监听
	 */
//	@ListenPoint(table = {"tb_brand"},
//			eventType = {
//					CanalEntry.EventType.UPDATE,
//					CanalEntry.EventType.INSERT,
//					CanalEntry.EventType.DELETE}
//	)
//	public void onEventCustomUpdate(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
//		BrandEntity entity = new BrandEntity();
//		//得到事件名称
//		if (CanalEntry.EventType.INSERT == eventType) {
//			System.out.println("insert操作...");
//
//			//如果做的是添加或修改操作，我们需要得到的是添加或修改后的数据，如果是删除操作，有可以需要得到删除前或删除后的数据
//			//以插入操作为例，我们需要得到插入操作的数据
//			rowData.getAfterColumnsList().forEach(f -> {
//				//获取列名
//				String colName = f.getName();
//				//获取列值
//				String colVal = f.getValue();
//				//根据列名得到值
//				if(colName.equals("id")){
//					entity.setId(colVal);
//				}
//				if(colName.equals("name")){
//					entity.setName(colVal);
//				}
//				if(colName.equals("first_char")){
//					entity.setFirstChar(colVal);
//				}
//			});
//
//			//将当前这条记录放到redis中
//			String brands = redisTemplate.opsForValue().get("brands");
//			List<BrandEntity> brandEntities = JSON.parseArray(brands, BrandEntity.class);
//			brandEntities.add(entity);
//			//保存到redis中
//			redisTemplate.opsForValue().set("brands",JSON.toJSONString(brandEntities));
//		}
//		if(CanalEntry.EventType.UPDATE == eventType){
//			System.out.println("修改操作。。。");
//		}
//		if(CanalEntry.EventType.DELETE == eventType){
//			System.out.println("删除操作。。。");
//		}
//
//	}

}
